RNN(Recurrent Neural Networks)循環神經網路主要用來序列型的資料,比如文本、語音、影片等等。樣本之間存在順序關係,也和之前的樣本存在關聯。例如文本中,一個詞和它前面的詞是有關聯的;又舉例如氣象數據中,一天的氣溫和前幾天的氣溫是有關聯的。一組觀察數據定義為一個序列,從分佈中可以觀察出多個序列。
把序列視作時間序列,隱含層ht的自連接邊實際上是和上一時刻的h相連(下面左圖)。在每一個時刻Xt,ht的取值是當前時刻的輸入Xt,和上一時刻的隱含層值ht−1的一個函數:
將h層的自連接展開,就成為了下圖右邊的示意,與Hidden Markov Model (HMM)
很像。兩者最大的區別在於,RNN的參數是跨時刻共享的。也就是說,對任意時刻t,ht-1到ht以及xt到ht的網絡參數都是相同的。
簡單的示意圖如下,會加入上一次的output當這次的inputs
共享參數的思想和和卷積神經網絡Convolutional Neural Network (CNN)是相通的,CNN在二維數據的空間位置之間共享卷積核參數,而RNN則是在序列數據的時刻之間共享參數。共享參數使得模型的複雜度減少,並使RNN可以適應任意長度的序列,帶來了更好的可推廣性。
RNN的hidden node閘門改良設計
Loong Short-term Memory (LSTM)
LSTM 共有 4 個 input,1 個 output
4 個 input:1 個想要被存進 Memory Cell 的值跟 3 個用來操控 Gate 的訊號
Input Gate打開時, input 才能存進 Memory Cell
Output Gate打開時,Memory Cell 的值才能傳出去
Forget Gate,打開時,會把 Memory Cell 裡面的值忘”
Gate 的值(0~1)是透過 Network Training 學得
類神經網路的架構如下所示:
如果我們把LSTM的forget gate全部置0(總是忘記之前的output),input gate全部置1,output gate全部置1等於把cell state中的信息全部輸出,這樣LSTM就變成一個標準的RNN。
GRU(Gated Recurrent Unit)是領一種神經內的閘門設計,裡面有兩個門分別是更新門與重置門。
重置門決定了如何將新的輸入資訊與前面的記憶相結合,更新門定義了前面記憶儲存到當前時刻的量。那些學習捕捉短期依賴關係的單元將趨向於啟用重置門,而那些捕獲長期依賴關係的單元將常常啟用更新門。
參考來源
循環神經網路
https://feisky.xyz/machine-learning/rnn/
陳雲濤的部落格
http://violin-tao.blogspot.com/2017/12/ml-recurrent-neural-network-rnn-part-i.html
深度學習原理與實務,蔡炎龍老師